Recently I read this post Software development topics I’ve changed my mind on after 6 years in the industry - Blogomatano and even though I didn’t agree with all the points in there, it did motivate me to write my own collection of opinions regarding software development in general. These are a collection of my opinions, you can agree or disagree with and that's ok.
General
- A good software engineer needs to understand/care for the business and user needs to solve problems in an efficient way.
- It’s 100% better to solve the right problem with a less optimal solution, than to have a 100% technical perfect solution for the wrong problem.
- Developers should talk to users as much as possible in order to understand their main pain points and test their solutions “on the field”.
- Build less features and increase the quality of the ones you have.
- Writing is a very important skill to a developer and we need the most practice.
- When presenting ideas, one of the most effective methods I know is to present them in a “story-telling” way. The delivery may sometimes be more important than the content itself.
- When you read other people's code or your past code you will always find flaws and that’s ok, we are all continuously learning.
Craftsmanship
- Writing code requires craftsmanship. Code that shows little care in the small things it's very likely to not be optimal for the big things.
- Linters are essential in projects that involve multiple developers and when there is a lot of developer rotation. They prevent small avoidable mistakes that will compound and make code bases a mess.
- Writing detailed explanations on commits/PRs and code is essential to understand the context in the future for any code that you write. When relevant this context must be provided as code comments as well.
- Understandable code is 100% better than "smart" code, this often ties as explicit code is better than overly-abstract code.
- Always share your learning with others, by any means you feel comfortable with.
System Design
- System design is a very important and under looked skill when it comes to development.
- System design means you think on the whole system when adding/changing features and how those changes affect the whole system.
- For a given piece of UI, the least states that UI can be in, the more easy is to reason about it.
- Writing a higher level documentation with diagrams and so on is something that software developers should do more often.
iOS Specific
- Writing iOS code that is close to the system is way better than writing “fancy” architectures just for the sake of it.
- Developing iOS apps that support most system features: Dark Mode, dynamic type, split screen on iPad, etc. leads to more robust apps overall.
- Subviews should not be declared in view controllers instances, they should be created in custom view types to make the UI “stupid” as it should be a reflection to the state. Defining UI inside a view controller contributes to massive view controllers and poor UI implementations.
- For an iOS developer is important to have a passion for UI and UX, trying to find the best experiences possible for users.
- Implementing a robust design system library is the best way to ensure your UI is consistent and easy to build.
- UI interactions must be the closes to the default apple guidelines, doing custom things should always be a conscious decision with a clear purpose.
- In most cases people use enums they should be using structs, they allow for customization and can be used with a similar syntax to enums.
- Doing cheap discovery prototypes is essential for learning and being an effective developer.
- UI should be able to be invoked from a vacuum (no networking, no tracking), just simple views and simple data passing. Then it's easier to test that UI in multiple contexts: iPhone, iPad, dark mode, different language, different accessibility settings, etc.
I will probably update this list if something important comes to my mind.
You can comment bellow if you want me to elaborate more on a certain points, some of them may deserve their own post.
Recently I read this post Software development topics I’ve changed my mind on after 6 years in the industry - Blogomatano and even though I didn’t agree with all the points in there, it did motivate me to write my own collection of opinions regarding software development in general. These are a collection of my opinions, you can agree or disagree with and that's ok.
General
Craftsmanship
System Design
iOS Specific
I will probably update this list if something important comes to my mind.
You can comment bellow if you want me to elaborate more on a certain points, some of them may deserve their own post.