Sunday, April 15, 2018

great software engineering skills?

great_software_engineering_skills = great_coding_skills + all_around_problem_solving_skills
Yes, you can be a great Java developer.
Yes, you can be a great C# developer.
Yes, you can be a great Python developer.
However, don’t associate yourself with a programming language because you are limited by the boundaries of that language.
What you should be is a problem solver and your horizon automatically expands.
I know :) You can still have a favorite language, but don’t associate yourself only with it.
Happy Saturday!
Almir.

Leader/Mentors in my life

I have been blessed in my software engineering career with great leaders.
Some of them challenged me in technical skills.
Some of them challenged me in my organization and leadership skills.
Some of them challenged me in both.
And all of them made me a better software engineer, a better senior engineer, a better solutions architect, a better teammate, and a better leader.
If you are a student, find yourself a mentor.
If you are a junior software engineer, find yourself a mentor.
If you are an experienced software engineer, find yourself a mentor.
Remember, you write your own definition of success and you are your own critic. That may mean that you TRY to perfect every stage of your career, or that may mean that you skip some stages in your career. Remember, you are in control.
That’s all I wanted to say today :)
Keep geeking out.
Almir

Owning and improving what you have is a sign of maturity in software engineering — Is it?

Re-factoring vs. Re-Writing?
A lot of times we heard the talks about “Never be satisfied” in the context of innovation and driving your teams forward.
In that context, this is totally fine, but when this mindset gets blindly used in the software engineering low level details, then you could be constantly re-writing code without taking the effort to truly understand it. Is this the right thing for business? Is it costly?
Re-factoring means that you took time to understand what you have, and you are improving it.
On the other hand, re-writing does not necessarily mean that you took the time to understand the low-level details; it may mean that you went back to requirements and decided to re-write it without trying to understand the low-level details. There could be something in those details that you need to know so you don’t make the same mistake again in the process of re-writing it.
At the end of the day, if you are constantly re-writing code, then there is no sense of ownership. Just put yourself in the shoes of the person who wrote some code that can be improved with some re-factoring and you still decide to re-write it. A few months later you may be in the position of that person where somebody else decides to re-write your code. How do we decide to draw the line because there is still business to support?
Please think about this as you are going through the existing code and consult with your tech leads and solutions architects. Let’s achieve the balance of re-factoring and re-writing.
Until next time,
Almir Mustafic

Daylight saving time and A Software Engineering state of mind ?


You may be wondering what the Daylight saving time has to do with a software engineering state of mind.
When thinking about writing this article, at first I thought to start with the following joke and I am:
Did you know that the Daylight saving time was started because a software developer coded a function that does smart timezone and configurable calculations and then this developer created a problem to solve to use the algorithm; hence, the Daylight saving time was born.
This is a joke, but on a more serious note, this brings me to a state of mind in software engineering that make this joke a reality to some degree.
  • How many times did we find ourselves in situations where we learned something new in programming and we looked for ways to apply it at any cost?
  • How many times did we see a cool new feature from a creator of a framework and we decided to use it even though that was not the right solution for the problem or maybe there was no problem to solve in the first place?
That is the state of mind I am talking about. I am sure we all found ourselves at some point in our career doing this or at least we were involved in the implementation of some project where somebody else made this decision and we had to deliver on this.
I am not by any means implying here that we software engineers should not explore and learn new skills and expand our horizon. Keep learning, but think about it in the following way:
Gain the skills on these new features in frameworks and even learn new frameworks and programming languages, but learn it the way a lifeguard gains her/his skills. Learn it and use it when that skill will be needed.
First understand what problem you are trying to solve. Then figure out a solution and lastly see what tools/frameworks/libraries and skills you have at your disposal to implement that solution in a most efficient way. Please do not open your portfolio of tool/frameworks/libraries/skills looking which one can help you solve your problem if you have not designed and solution-ized it independently first.
Almir Mustafic

Simple Security tips for your Windows personal computers

Here are very simple security tips for your Windows personal computers.
1. Create a standard or limited windows user and use this user from this point on.
2. Install Microsoft Security Essentials. You will be prompted the admin password. Turn on the firewall and run a scan.
3. Use non-native browser for your OS. You can either go with Firefox or Google Chrome.
4. For your choice of non-native OS browser, think about installing some smart Ad blockers that are fair to good advertisers and properly block intrusive advertisers.
5. Buy a packet USB drive and do a cold backup of your files to USB once a month and keep a copy of this in a house and another copy outside your house (family house or friends house or even at work).
6. Pick a secure password manager solution and use it. Never allow browser to save the passwords locally because that is not as secure as dedicated password management solutions such as: 1Password, LastPass, KeePass and others.
Almir Mustafic.

Measure without putting burden on your team

Imagine a software engineering world in which you measure the value your teams deliver with almost ZERO burden on your teams in terms of spending time to enter information correctly !
If the teams are worried and constantly thinking about being measured, then we are not doing it properly.
It is very possible to measure without putting a burden on your team.
This is where I stand for the first item in the agile manifesto that states: “Individuals and interactions OVER processes and tools”.
For me the number #1 thing is to have the team reach that point at which you look at each other and you know you have the momentum, quality and product value and it’s fun doing it. Then the number #1 thing is to ride this momentum wave as long as you can with fine-tuning adjustments from sprint to sprint and stop any influences where the first item of the agile manifesto would be jeopardized.
Yes, I know that a lot of companies are regulated and you need the processes for auditing purposes, separation of responsibilities, repeatability; however, you still need to watch out for that first item in the manifesto.
Thank you for reading this short article.
Almir Mustafic.

New Employee jitters as a veteran in a company?

I have been at my current company long enough to get too comfortable, but is that the case?
The years I have spent in my current job feel very much like 3–4 jobs. First, it is natural for a company to go through different types of leaderships roughly every 4 years. On top of that, there is the technology aspect and its changes over the years, and different types of projects I have been part of. All of these things painted a picture in my head as if I changed jobs 3–4 times, and in fact I have been with the company slightly over 12 years.
What is the secret to still getting “New Employee” jitters every week even after being with the company for so long?
(1) Don’t wait for your leaders to challenge you. You need to challenge yourself from week to week.
(2) You need to care.
(3) Appreciate what you and your team accomplished, but never be fully satisfied. Look at this from a positive angle. Look at it as an opportunity.
(4) Don’t judge somebody else’s engineering efforts that you inherited; you don’t know what circumstances they performed that under. Try to understand it, identify what can be improved and improve it; this will keep you on the edge because improving something you inherited is harder than just building it from scratch because you might not have an option to build from scratch.
(5) Create a great team so that you are in a room with a group of people who are smarter than you. For example, as a solutions architect I may be the one making decisions on designs/solutions, but every day I learn something new from my teammates and that’s a great feeling.
All of this adds a bit of that uncertainty and a new boost of energy from week to week. This is enough to still get a bit of “New Employee” jitters that make us prove ourselves over and over again.
Thank you for reading this article.
Almir Mustafic

Troubleshooting production issues and log analysis

TROUBLESHOOTING production issues and Splunk log analysis:
This skill is not something you can gain over night. It is a skill that you improve by being in tough and under pressure situations. Then over years you end up painting this whole scheme in your mind on how to approach problems. It almost becomes the second nature to you.
I strongly recommend it to all software engineers. Yes, we all like to be working on new code and writing new applications, but the 10 lines of code that you write will be so much better because you were in the shoes of troubleshooting production issues and you will consider things that other developers will not.
Don’t think of troubleshooting production issues as a downgrade in your career. I’d like to think of it as a necessary step in completing your software engineering skills and graduating. At the end of the day, if we write code, we should be maintaining that same code to appreciate the value of it. If that code is not stable, it is in our interest to make it better if we get called often to troubleshoot it in production.
Thank you for reading this article.
Almir Mustafic

WORK RELATIONSHIPS AND RESULTS?

Relationship that is based on focusing on results and then strengthening it as you taste success together after some tough times.
OR
Relationship that is established with relationship in mind first without focusing on results as the primary catalyst.
There are leaders in both sides of the camp depending on your professional leadership style you may gravitate towards one of these a bit more.
Process is the third driver in the picture and some leaders tend to gravitate towards this.
Understanding or having this topic formalized is a good step forward for a leader in this fast-paced world where we need to learn every day.
I recently attended a leadership workshop that formalized a lot of this. The name of the workshop was “Facilitative Leadership” and it covered much more.
Thank you for reading this article.
Almir Mustafic

Process — we love to hate it, but …

Process is good to protect your end customers.
When people say they don’t like the process, they don’t really mean that they don’t like the steps in the process, but rather they don’t like how these steps are streamlined.
The process should be streamlined to encourage us to launch more often and to launch smaller increments instead of making us bundle things. When it takes a long time to get things approved, the approval process could be very centralized. What microservices may improve with natural de-centralization, a centralized process may undo in terms of agility and speed.
To de-centralize the approval process, tech leaders on the floor could be ITIL certified and act as approvers; with that permission comes responsibility.
The ultimate goal would be that the same number of steps would be executed in the process, but the steps would be much quicker and streamlined in a more enjoyable fashion. The end goal is to keep the end customers satisfied and to pass all the audits.
Thank you for reading this article.
Almir Mustafic

Difference between providing requirements and giving implementation details?

Difference between providing requirements and giving implementation details ?
Here is a metaphor for this:
Can you increase the power of the engine vs. can you make the car go faster?
Which one of these is a true requirement coming from the overall car product manager and which one is an implementation detail?
We can definitely make the car go faster by increasing the power of the engine, but it depends how much faster you want to go. For example, we can instead put some lightweight wheels on the car and it will definitely go faster because we are reducing the inertia. Or if it is about going faster on a track doing multiple laps, then adding better brakes will also make you do faster laps.
So asking us to make the engine more powerful is not necessarily a requirement but rather an implementation instruction.
You can now apply this in software engineering and as a software engineer please truly understand the requirements and if they are not requirements, ask for them. It is important that you do NOT narrow your thinking and end up doing a wrong implementation.
Thank you for reading.
Almir

2017 In Review — My Tech Life

  • * My work accomplishments
  • * Blogging
  • * YouTube software engineering series


Almir