Ya this article was great. I wish I could convince my coworkers to take a deep dive into Git. I do it probably once a year and it’s helped me be the “hero” with confidence several times.
Git is exciting/interesting to me…it is not normal.
Ya this article was great. I wish I could convince my coworkers to take a deep dive into Git. I do it probably once a year and it’s helped me be the “hero” with confidence several times.
Git is exciting/interesting to me…it is not normal.
I just took a stab at git worktree
at work this week after rereading this article. It’s amazing. We were in the process of upgrading our UI component library and I was able to checkout pre/post upgrade branches without having to continuously npm install
to swap between dependencies.
Plus I’m pretty sure I could have both “versions” of our repo locally running at the same time so I could do UI comparisons…but I didn’t actually get that far.
Hm. In that case, smaller more frequent breaking changes may also not be ideal. It sounds like no matter how small the breaking change, everyone who uses the library is going to have to update their code… and if it’s happening frequently, that could get annoying.
This may be completely off-base, but just going off of what you said about data traversal, would it be completely out of scope for your library to provide a consistent interface for getting/traversing the data it is responsible for? Or do the consumers all use/traverse the returned data in very unique ways such that you couldn’t really develop a “general” API of sorts.
I’m a dev that consumes company wide libraries, not an author of such libraries. So the following comes from that perspective.
First off, SemVer is definitely going to be important. Also, it sounds like you’re working toward API stabilization which is going help iterating in the future.
If your library is made up of several isolated components, what about doing major releases (ex 2.x.x -> 3.x.x) more frequently? Only include a small subset of breaking changes for one or two components rather than jamming a whole bunch in there just because it’s a “major version release”. The result is you could move quickly and iterate while also minimizing the impact on ALL of your users every release. Some of your users may be able to upgrade to the latest without having to touch much or any of their code.
Do frequent major release (ex 2.x.x - 3.x.x) but always start with an “alpha” release that early adopters could implement and provide feedback on. This would shield the majority of your consumer’s code from having to iterate frequently but would also require you to enlist a group of committed early adopters that are diligent about iterating their code as often as you release.
This could work if your users are excited about your releases. But, it could result in people NEVER upgrading because it’s too much work to do so. (I’ve seen this happen. No one upgrades until they absolutely have to.)
Depending on the size of your company, this will be a lot of work for you and will slow you down. If you’re using your users to vet out new features, then everyone is going to have to iterate frequently (like you said) if experimental changes don’t work out.
What did it for me is I stubbornly refused to use Git via VSCode and stuck with the terminal. I also stubbornly refused to change my default text editor for GIT to something other than VIM. One light bulb moment I had, funnily enough, was when I finally read the VIM docs and learned how to save and close rather than panicking when it popped up (this was early on… but not THAT early on … so still funny). That sparked my curiosity to truly learn VIM.
After that, I realized command line tools could be learned and advantageous and so it just went up from there.
Honestly, I’ve noticed a difference in the confidence level of peers using command line tools based on whether or not they learned GIT using command line or jumped straight to just clicking the buttons in VSCode.
If you’re talking a straight up senior individual contributor without mentorship, leadership or ownership responsibilities attached, then I agree with what others have said about autonomy. A senior is given a problem or task and comes back some time later with the completed solution. If there is feedback, a senior will get clarification, go away again, and come back with an updated solution.
In my experience, this has required:
To more directly answer your question: Time isn’t necessarily a factor. Demonstrating that the way you approach problems/tasks and the actual results you produce can be trusted and relied on firmly plants you senior territory imo.
Side note: as a 20 year vet, can you comment on my theory that I’m going to age out of software engineering? How did you make it 20 years? (Real question)
Is that still the case? I thought those days were over.
Some great comments here. Tangentially, I occasionally day dream of running or working for a company that flips typical corporate “intention” on its head – Specifically by placing employees at the highest place of priority and let profits, progress, customers, share price etc. be what they’ll be. I think that would be a very interesting experiment.
As far as how that relates to pay, part of the experiment would be to pay each employee more than they are “worth” to market. Just to see how it changes things for them and the company.
At the same time, “freeloaders” and folks that just can’t cut it would need to be identified and separated from, to protect those that recognize and appreciate that the company is truly looking out for them and are reciprocating with true hard work and value creation.