What my kids taught me about building software and the other way around!
Hi, I’m Gilad. I lead Bit’s open-source team, I’m a husband to Sivan and a father of two amazing little boys: Arad (3-years-old) and Tavor (1-year-old).
In this post, I’ll be sharing from my personal life experience as a father, husband and software developer.
Though it isn’t always simple, these different parts of my life all impact each other every day when I write code, and when I’m with my family.
This is my personal experience. I hope you’ll find it interesting, and maybe even useful. Feel free to comment, share your insights, and maybe even share how this feels from a mother’s perspective! Enjoy.
A bit about my life
I am a father of 2 wonderful boys: Arad is 3 years old and Tavor is barely a year old. Both a little energy bombs, full of curiosity and joy. Though I don’t remember sleeping for years, they are the best thing that happened to me.
I work at Bit. I don’t just work there, I build something I believe in. I’m working on an open source technology which can change the way we build software using smaller components. I’m very excited about this future.
My life is a composition of the family, work, friends and all my side hobbies such as the university’s debate club, open source, running and so on.
During the past 3 years, I’ve increasingly noticed that certain aspects of my life share the same experiences, and require the same skills to succeed.
Writing code and raising kids
Skills and characteristics I’ve developed as a father actually make me better at my work and getting better and work does -to my great surprise- make me a better father and husband. These skills range from Creativity and Persistence to Team-work and even Algorithmic thinking and design patterns:
- Logical thinking
- Learning new skills
Let’s dive in!
Creativity vs. the impossible
In my opinion, this is one of the most important skills for any developer.
As a software developer, you always face new problems which require creative solutions. What seems to be impossible can be achieved if you’re creative enough. This is the key to innovation.
As a developer, you constantly boost and groom your creativity. This also makes you a better dad.
Creativity affects every aspect of how you raise your children. For example, it helps you calm your child when they’re crying, sad or angry.
Every parent is all-too-well familiar with the impossible situation when your child is crying for no apparent reason, or when they decide they want something they can’t have right now. The screams can pierce the soul of anyone who comes within range.
As a parent, this situation is very frustrating. In public, it’s also embarrassing.
So, how do you “solve” the case of a child who wants candy at 4 AM? You get creative!
Personally, I found out that when I offer a similar replacement to what he wants, I only make him angrier. The creative solution, however, is usually to invent something completely new which you can give him right now.
Something they didn’t expect means they are caught off-guard. Then, they start to think and evaluate the situation. When you think, you don’t yell as much as before. They also quickly forget what it was they wanted.
This, of course, requires a lot of creativity (and more over time as you use this method over and over again; how many things can you come up with?).
Pass this creativity to your child
Kids are creative by nature. Unfortunately, as they start growing up, they become less creative and more conventional.
By being creative and rewarding creative thinking you will:
- Keep your child creative for a longer time. You defend him from the people out there that try to shut his mind down to make him more predictable so they can better handle him. That’s a huge thing.
- Empower his creativity by your own creativity. Combine a few creative minds together to create a synergy which results in astonishing outcomes.
Responsibility even when it’s hard
A great developer is not just creative, they’re also responsible. A developer working on a core piece of the product bears a responsibility to their team members, their organization, their product users and so on.
Developers who “think small” and don’t realize that with great power comes great responsibility, will end up hurting themselves and other people.
I believe that responsibility is best learned by example.
It’s something that you learn, practice and applies to every aspect of your life. If you’re responsible while you code, you’re more likely to be responsible -and accountable- in other aspects of your life.
Responsibility learned from building software comes in super-handy to my life as a dad. When your kids learn that you take ownership of your words and back them up with actions, they can grow up to follow your example.
Don’t cut corners at work, and don’t do it at home.
Kids require a lot of attention and hard work. They also come with a lot of smaller stuff to handle. For example:
- Don’t forget to bring extra clothes in case they get wet!
- don’t forget to bring a toy for the baby!
Just like I wouldn’t hit “deploy” and got home in the evening, I won’t take my kids somewhere without being prepared for whatever can come our way. Be prepared, be responsible, see things through.
Persistency facing failure
Persistence is about not giving up and keep on going forward without a break even if there are obstacles, failures or just some boring times.
Developing software is about trying to make something. This often means trying again and again until it works.
Almost every day a developer has to try different things, different solutions and approaches (suggested by a developer’s best friend: Google) to a problem which should work in theory, failing time after time.
You need to be able to grow from failure, which is easier said than done.
Kids are sensitive creatures which tend to take failures emotionally. If something isn’t going right, it’s often the end of the world as we know it.
On the other hand, they are also full of energy, motivation, and imagination.
A child often takes on an endeavor without realizing that it’s harder than it looks. Then, they begin to realize it’s hard and they experience failure. This might cause them to break and stop pursuing their goal, no matter how hard they worked or how far they’ve come.
Much like in solving software problems, you should direct them to a better path. Show them that you’ve failed too, and how you overcame it to succeed. Inspire them and teach them to feel a failure as a legitimate step on the way to success. After all, everyone fails.
A few tips:
- Sometimes, they don’t see the full picture of things. Help them see it.
- The environment and conditions might not be set for success. Teach them to change it.
- Teach them to experience frustration as motivation for the rewarding feeling of success.
The key isn’t to teach them that they should succeed all the time, but rather build their inner confidence that they can succeed.
Teamwork is key
The developer’s work is often perceived as an individual thing, which mainly involves yourself and your computer.
That’s far from true. It’s all about people.
Software development is usually done in teams where different people play different roles, and all of them play together. In Bit, I often feel like being part of a great basketball team: I pass things to other, block for them, and we run drills together so one of us can score, and everybody wins.
Architecture meetings, code reviews, asking for advice, integrating things, teaching others and learning, are all a part of every day’s work.
Good developers have to translate complex concepts and structures into a plain language which their team members can understand and communicate.
They need to learn how to give and take criticism with a smile. They need to make others share and understand your challenges and needs, even when they don’t know your full context.
There is a whole lot of common ground between communication between developers and communication between a parent and their kids.
Most kids lack most of the context needed to understand what you’re talking about, for a large portion of the time. This means that much of your conversation is about you trying to explain a complex thing to a child.
Practicing this ability makes you better at communicating with adults. You learn from how you make your kids understand things, and use it at work. You learn from how you help your team members understand you, and apply it to your kids. It works.
Another aspect is the ability to give or receive building criticism.
As a parent, you have to teach your child right from wrong and establish clear boundaries. Kids being kids, they will make plenty of mistakes. That’s ok.
When they make a mistake, you will give them feedback to help them learn and improve. You don’t want to crush their confidence or deter them from trying, but rather teach them how to get better.
Being able to do this in a constructive way rather than a destructive way will make things easier for both sides and also much more productive. That’s much like making a code review for another developer in the team.
If we can take the way to teach our children and apply some of it to our work, we will vastly improve team works and make everyone better at their job. The best code review in the world is worth nothing if the person who received it couldn’t hear what was being said, because of how it was said.
This works both ways- learn how to listen like a child and don’t be offended when listening to someone else talking about your work. I know it’s hard. Learn how to give and receive the core rationale of the feedback, refine the points you need to improve and process the information with an open mind.
This will also help you with your kids when your emotions are getting high (it’s hard when your kid is shouting on you, trust me on this one) and you need to understand what is the real problem.
Another useful skill I’ve learned is how to explain yourself using props. Lego pieces, drawings, kitchen gear- everything goes. A visual is better than a thousand words after all. It works with kids and with my team alike.
Algorithmic thinking and pattern recognition
This part doesn’t require a lot of explaining on the developer side.
We all write algorithms every single day and find patterns in every piece of code we look at and every framework we learn.
The way kids think is usually more associative.
There are a lot of advantages to this kind of thinking, but it often lacks a clear logical structure. Most kids only develop that kind of thinking later on.
As a developer, you often break down complex things into smaller logical steps and decision trees. The challenge is to communicate this kind of thinking to your kids and help them learn from it.
What works best for me is to show my kids how I approach a problem, break it down and reach a solution. Don’t just hand out the answer; teach them the same logical thinking that makes you a good developer.
You can also use some drawings which show the different parts and how they work together. This will improve your kid’s ability to do the same on their own, and adds an important ability to their toolchain.
One step at a time, they will get the experience of using both kinds of thinking and decide which is better for a specific situation.
On the flip side, sometimes you are thinking too logically about a problem. learn from your kids! Sometimes, intuition and concern-free thinking can be your best way to success even when things seem too complex.
The way your kids think can bring a new perspective and connect you to important steps you might have missed.
Software development is one of the most dynamic fields in today’s world (especially web devolvement). Not-learning will make you obsolete quickly.
I estimate that most developers spend a few hours a day learning new things. This is one of the best things about being a developer. It’s also a skill you can practice, improve and leverage in almost every aspect of your life.
Learning means being able to understand what you’re looking for, find it (today, with a few clicks), understand it, tell what’s important and what’s not, and then applying this knowledge along with things you already know.
We all face a lot of situation when we need to do things we don’t really know how to do. Naturally, kids are even more exposed to this kind of situations. This makes kids awesome natural learners.
Having you guide them in the learning process is a great asset for them. You can point them to something else they already learned before. You can help them in the process of integrating some knowledge. You can help them by asking key questions (and provide answers only when necessary).
Kids have an unlimited natural curiosity and desire to learn new things. It’s critical not to suppress this born nature, but rather to nurture it. Improving their learning skills will result in happier kids with a better future.
Raising kids is one of the most complicated tasks in the world. So is building software. We all want to become better parents and better developers.
There are no gold rules. There is only the ongoing process of ever improving, learning and becoming better while passing on these key skills to our kids.
These are my opinions. Others may have different beliefs. Personally, I tried to think what are the best tools I can give my kids in order to better understand the world for themselves and decide what is best for them.
I’m trying to equip them with the tools I believe will give them the best starting point of this world, which will make them the happiest.
I find that learning from how I build software with my team applies to many aspects of being a father and that these two parts of my life can learn a lot from each other. Taking a real look into yourself and the skills you possess in order to pass them on to your kids is a very important process.
If you are a developer I encourage you to look on your own skills as a developer and think how you can apply them to raise your kids.
Thanks for reading. If you enjoyed this article, feel free to hit that clap button 👏 to help others find it. Please feel free to share your thought below!
Say Hi on Twitter or check out what we’re building at Bit.
Bit helps you share, discover and use code components between projects and applications to build new features and…bitsrc.io