The US tech sector, a crucial engine of innovation and economic growth, faces a significant challenge in the form of a recently implemented tax change.
Section 174 of the 2017 Tax Cuts & Jobs Act, initially overlooked, has emerged as a major concern for early-stage and small technology companies. This provision unexpectedly alters the tax treatment of software development costs, potentially hindering essential growth and investment.
So what does that mean exactly?
Up until recently, labor costs for R&D, including labor for software development, can be immediately expensed.
So if your business makes $1M in revenue, and spends $1M on software development labor, then your profit is $0, and you taxed nothing. However, with the amendment to Section 174 all of that changes.
With the adjustment, all costs related to R&D have to be amortized over 5 years – or 15 if labor is done outside of the US.
Here is how amortization works for labor within the U.S.:
- 10% amortized for the first year
- 20% amortized for years 2 to 5
- 10% for year 6
Going back to our previous example, this means that in the eyes of the government, you would have made $900,000 in profit that year and would have to pay $189,000 in corporate taxes.
|Software engineering labor costs paid during the year
(10% from last year
20% from this year)
(due in 2022)
(due in 2023)
(due in 2024)
So what happens to a small, bootstrapped company without $189,000 in cash in the bank? You have two options.
- Take out a business or potential loan at a relatively high-interest rate (~10%).
- Lay off as many software engineers as it takes to pay the bill.
Taking this scenario a step further, given that this company even survives the tax season, it’s not hard to imagine the impact this will have on the product roadmap if they go with option 2.
The potential impact of Section 174 on the tech industry
On a larger scale, the changes to Section 174 will directly translate to reduced hiring capacity, potentially leading to talent freezes or even more layoffs. In a competitive landscape where skilled software engineers are essential, this decline in hiring power could potentially slow down innovation.
Furthermore, the provision disincentivizes the employment of international developers. With a longer amortization period of 15 years for foreign workers, companies face a significant tax penalty for remote or contracted development teams.
This could lead to a shift towards outsourcing software development instead of cultivating in-house talent, a potential blow to domestic job creation and knowledge transfer.
Beyond the immediate challenges for startups, Section 174 carries broader implications for the US tech ecosystem. The disincentivized investment in internal software development could benefit SaaS companies and technology vendors, potentially altering the competitive landscape.
Additionally, the tax burden could discourage the incorporation of tech startups within the US, hindering the nation's ability to attract and nurture promising early-stage ventures.
If you’re wondering why hasn’t big tech sounded the alarm, the answer is they did but it happened in the form of lobbying efforts going as far back as 2018.
What can startups do to protect themselves?
Some startups are exploring creative solutions, such as restructuring operations or embracing remote talent pools, to navigate the new tax landscape.
Section 174 presents a significant hurdle for the US tech sector, particularly for early-stage and small companies. Its unexpected impact on tax burdens, hiring capacity, and the utilization of international talent requires immediate attention and potential policy adjustments.
Luckily, there is still a chance all of this will be reversed and things will remain the same. The only question is how long will it take.
If you’re looking to stay competitive in the market and not incur exorbitant fees, then consider looking to scaling your team with Trio. Our 3-step interview process was designed specifically to capture senior-level technical and soft-skill signals and hire the right Top-Tier software developers for your team.
With Trio, you can focus on what you love most - deliver great products while we handpick and shortlist from our pre-vetted talent network. We'll enable payroll, benefits, taxes, and local compliance and support you with onboarding and long-term talent management.
3 min read
C is a general-purpose programming language, meaning it can be used for a wide variety of purposes from building operating systems to computer applications. The language also supports a number of features and paradigms including structured programming, lexical variable scope, and recursion.
Structured programming is a programming paradigm that favors one, singular structure per program. In this way, code executes instruction by instruction chronologically.
With structured programming, alternatively called modular programming, code is readable and there is leeway for reusable components, which most developers find helpful.
Lexical scoping refers to the semantic scope of variable names in a function or program. In other words, lexical variable scope answers the questions of whether a given variable has meaning outside of the function it is written in – and this is determined by the surrounding code.
In recursive programming, functions have the ability to call on themselves, whether directly or indirectly. The utility of this feature is to break up a problem into smaller problems. Specifically, coders can use a previously established value to compute a new one.
The C programming language uses a static type system as well. Within the context of programming languages, static type systems involve static type checking where the language checks your code before it is even compiled.
The main advantage of static typing is early error detection. This can help to reduce the time spent debugging later on.
As far as background, C was developed by Dennis Ritchie in 1972. Its initial purpose was to write operating systems. Low-level access to memory, the use of simple keywords, and a clean syntax makes C easy to use for such a task.
Overall, C is one of the optimal programming languages when it comes to systems programming.
Systems programming is programming where developers build integral software systems that other applications rely on. These systems include firmware, operating systems, and development environments.
C flourishes in this undertaking because it is a middle-level language. Low-level languages like assembly language talk to computers in the most direct format that you can imagine. The downside of this is that humans struggle to keep up with the conversation.
This is why there are high-level languages. High-level languages abstract machine code to where human developers can talk to computers on their own terms. Most coders have found this to be the most efficient way of writing programs.
However, C is a combination of both. It is a middle-level language and as such developers can use it for low-level programming like building kernels and drivers as well as high-level programming like developing software applications.
What Is a C developer?
C developers are closely familiar with the fundamentals of systems programming. They develop code that integrates into base computer systems. Embedded systems, operating systems, and kernel modules all rely on systems programmers like C developers.
C++ is nearly a superset of C. Save a few minor details, the two languages are very similar. Expert C developers may learn C++ as well to increase their effectiveness.
Other languages in the repertoire of C developers might be higher-level languages and frameworks that work well with C like Java, Node.js, and Python.
As systems programmers, C developers have strong problem-solving skills and use structural programming to write clean, reusable code.
Why Use C?
The first and foremost justification for using C would be if you wanted to build an operating system. After all, in the 1970s, C was the vessel in which UNIX was re-designed. But despite the goal-oriented origins of the C language, various elements of its development make it a fitting language to use for an array of needs.
There are only a handful of middle-level languages. And if you were to pick them out, you’d probably come up with Java and C++ in addition to C, and there’s even some dissent there.
Either way, the general consensus is that C is a middle-level language. Because of this, C is one of the best languages for building both systems and applications. Therefore its usage is by definition flexible.
As a programming paradigm, structured programming allows developers to make complex programs by compartmentalizing their codes into simpler structures via task-oriented functions. Some examples of structural programming in action are if-else statements and for-loops.
Though many languages make use of this type of programming, C may very well be the oldest structural programming language that still maintains its popularity. This is because C is reliable.
Portability describes how compatible certain computer programming languages are in diverse environments. In the case of C, the language plays a major part in Windows, UNIX, and Linux operating systems, demonstrating its portable nature.
C is general-purpose. In effect, no matter what you want to develop, C is there for you – for games, graphics, applications, and more.
Advantages of Using C
C is equipped with a number of supportive features to develop keeping high-level functionality in mind. As the intent of C was to develop operating systems, its features must be fully comprehensive and performant.
C is case sensitive. Lowercase and uppercase letters are differentiated. This can make certain elements of coding far less confusing and more direct. It’s also easier to parse through case-sensitive code.
The library C offers is rich with built-in features and is furnished with dynamic memory allocation. What’s more, C has much less library functions than other languages but just as many functions, simplifying their deployment.
In computer programming, keywords are the smallest building blocks of programming that work as gateways to writing complex code.
Keywords like if, else, and return may be familiar to you. The C language only has 32 keywords, overall only a small number to remember and eventually master.
C is the go-to language for developing embedded systems, Embedded systems contain hardware and/or software designed for specific functions. Digital cameras and robots are good examples of embedded systems.
Developers use C for embedded systems because it is flexible. The high-level abstraction of C combined with its low-level alliances make it a great language for this sort of development.
Companies That Use C
- Microsoft Windows
Reasons to Hire a C Developer
It’s fairly common for businesses to go the mobile app route in contemporary software development. They’ll cross out a couple of months on their calendar, get a grasp of Java or Swift – for Android or Apple respectively – and be on their way.
App development is an accomplishment no matter how you do it. But when things become commonplace and you follow the lead of your competitors, it becomes difficult for your business to stand out.
If you wish to stay competitive, your business needs to be challenged. Rather than putting an app on the app store, why not develop an entire software.
Adobe, most Google applications, and the entire Linux operating system was built with C. These are software systems that have topped the technology sector and have garnered worldwide familiarity and usage.
Most popular C programs aren’t simply apps, they’re relevant components of daily work and life for millions of users. Depending on the developers you hire, you’ll have the resources you need to do the same.
It starts with a good idea, and the right developers to manifest it. Hire a C developer.
Hire a C Developer
C is well over 30 years old. With languages being built every other fortnight, it’s hard to keep up with the competition. But somehow C has managed all the while.
Of course, old age does come with consequences. The market favors young people who favor young languages. This doesn’t make C less trustworthy or useful, but it is a little tougher to find the professionals you’ll need to program in C.
Trust the process, trust your research. Trio also has resources to help you. Take a look.
How do you hire a C developer?
For those who wish to take the high road and hire C developers on your own, we’re still here to help.
Hiring a developer on your own is a very focused and hands-on process that requires considerable knowledge about software development in general.
The last thing you want to do is trust your hiring process to someone with no technical ability. If you are a non-technical manager looking to learn a thing or two, we have a great resource here for you to learn more about the hiring process in detail.
Otherwise, we’d recommend you contact Trio for consulting and developer allocation.
What should you look for in a C developer?
C developers at a high-level should demonstrate the following skills:
- Proficiency in C and preferably in C++ as well
- Knowledge of high-level languages that are often integrated with C such as Java, Python, Go, or Node.js
- Abstract critical thinking and problem-solving aptitude
- Ability to write and implement algorithms and data structures
How much do developers cost in the U.S.?
ZipRecruiter data reports that the average yearly salary of a C developer is $117,673 On the higher end, C developers can make as much as $155,500 per year. But C developers can also make as little as $67,500 annually.
How much do developers cost in South America?
Due to economic differences between the United States and South America as a whole, the cost of offshoring software development is significantly lower than hiring full-time with U.S talent. For Senior C Developers in South America, the average salary is currently around $100,000 whereas a mid-level developer costs around $76,000.
How much do developers cost in Ukraine / Eastern Europe?
Eastern Europe shares very similar rates to South America, again due to the economic differences. When looking at salaries in Eastern Europe, data shows that a Senior C Developer costs around $100,000 on average.
Hourly Rates for Developers
Another way to look at developer costs is through hourly rates. While salaries are good to understand for hiring developers for full-time and long-term, you might just need a developer for a period of 3-6 months or 6-12 months. In these types of situations, it’s best to calculate your costs based on the hourly rates of a developer.
Below is a table that lists the various hourly rates of developers in different locations based on their job title.
Why Hire a C Developer?
Trio C developers are pre-vetted, interviewed, and then trained further to become true software professionals, capable of adapting to situations that are both within and outside of the scope of their general expertise.
At Trio, we hold our developers to a higher standard. Much like how elite special forces units recruit only the best from main branches of the military, we recruit developers who either show amazing potential or demonstrate exceptional skill. We then take their talents and sharpen them even further.
Another benefit of hiring a Trio developer is that you won’t incur the costs of hiring, which can add up to be around 30% of a developer’s salary on average, as well as overhead costs associated with full-time employment.
By working with Trio, you can enjoy a highly experienced full-time developer for a fraction of the cost, along with the added project management assistance.
To learn more, tell us about your project and we’ll get you started.
6 min read
Structured one-on-one meetings are like following a recipe, they provide managers with the opportunity to connect with your team members, understand their goals and challenges, provide feedback and guidance, and ensure all the necessary ingredients are in place so that everyone is aligned and working towards a common goal. In this guide, we'll explore some best practices for engineering managers hosting one-on-ones with team members.
7 benefits of one-on-one meetings
You can use one-on-one meetings for a variety of reasons, including:
Connecting with team members
Creating a supportive space for discussion can foster a team culture of open communication and feedback. One-on-ones provide managers an opportunity to get to know team members as a person and teammates.
Helping employees achieve their goals
Identifying goals and action items for your employees is an important part of supporting their growth and development. Here are some steps to help you identify goals and action items for your team members:
- Discuss aspirations: Ask about career aspirations and what your employees would like to achieve in their role. This can help identify areas where they are motivated to develop their experience.
- Identify areas for improvement: Review performance and identify areas where employees can improve their skills or knowledge. This can include technical, soft, or management skills.
- Establish accountability: Determine who will be responsible for each action item and set deadlines for completion. This can help ensure that progress is being made and that goals are being achieved.
- Set SMART goals: Work with your employee to set SMART (specific, measurable, achievable, relevant, and time-bound) goals that align with their aspirations and areas for improvement. These goals should be challenging yet achievable and provide a clear direction for their development.
- Create action items: Identify specific actions individuals can take to achieve their goals. These should be practical, realistic, and aligned with the employee’s skills. Some examples include:
Attending a training course or workshop
Shadowing a senior team member on a project to gain more experience and exposure to new skills and techniques.
Setting up regular 1:1 meetings with a mentor or coach to receive feedback
Taking on a leadership role in a project
Collaborating with another team on a project to gain experience in cross-functional team dynamics.
Writing a technical blog post
Contributing to an open-source project
Sharing performance feedback
Providing constructive feedback to your peers as an engineering manager is an important aspect of building a strong and effective team. Here are some tips on how to provide constructive feedback to your team:
- Be specific: Provide examples to support your feedback. This will help your team members understand what they did well or what they need to improve on.
- Example: "I noticed during the last team meeting that you interrupted others while they were speaking. I love that you're excited about this topic, but try to let others finish their thoughts before sharing your own ideas."
- Be objective: Don’t making personal attacks or being overly critical. Focus on the facts and be objective in your feedback.
- Use a positive tone: Frame your feedback in a positive way, emphasizing the things your team members did well and offer suggestions for improvement.
- Example: "You did a great job presenting during the last client meeting. However, I think it would be even more effective if you could use more visual aids to support your points."
- Focus on behavior: Focus on the behavior or actions that you are providing feedback on, rather than on the person.
- Example: "During the last sprint, there were a few instances where your communication with the team could have been clearer. Let's work on improving our communication going forward to avoid any misunderstandings."
- Offer solutions: Provide specific solutions or suggestions for improvement. This can help your team members understand how they can improve and feel more motivated to make changes. If you have a solution or action plan right away, that’s OK. You both can take time to brainstorm possibilities.
- Example: "I noticed that you've been struggling with a particular coding challenge. Perhaps some training sessions or taking an online course to improve your skills in that area might help. What do you think?"
- Follow up: Check in with your team member after providing feedback to ensure that they understand the feedback and are making progress towards improvement.
- Example: "Thanks for taking my feedback on board. Let's check in next week to see how things are going and discuss any further"
Addressing concerns or issues
Giving your team a safe environment to discuss concerns or issues allows managers to identify and resolve hiccups before they escalate and become bigger problems.
Prioritizing career development
Helping employees identify areas for growth and development, as well as provide guidance on how to achieve their career goals is essential for long-term success.
Aligning team members Bringing team members together
Carving out time on a regular basis (i.e. monthly) to review team objectives, discuss progress, and identify areas for improvement is key to making sure your team is working toward the same goals.
Offering recognition and rewards
Recognizing and rewarding team members for their hard work and achievements can boost morale and motivation. Regularly acknowledging successes, offering praise, and discussing rewards creates an environment in which everyone feels trust, safety, accountability, and equity.
How to prepare for one-on-one meetings
Be consistent but flexible
To create consistent and open communication, establish a regular cadence (weekly or bi-weekly) for one-on-one meetings with each team member. However, leaving room to adjust as needed is crucial. For instance, if a team member is struggling with a particular issue or project, you may decide to increase the frequency of your one-on-one meetings to provide additional support and guidance.
Give ample time
The length of one-on-one meetings between a manager and a team member can vary depending on the needs and goals of the team member and the availability of the manager. However, a typical length for a one-on-one meeting is between 30 to 60 minutes. It's important to note that the length of the meeting should not be the primary focus, but rather the quality of the conversation and the outcomes achieved. The meeting should allow sufficient time to cover the key topics on the agenda and provide an opportunity for open and productive communication between the manager and team member. The one-on-one meeting should be focused on the team member's goals, challenges, and development. Give the team members ample time to speak and share their thoughts, ideas, and concerns.
Provide an agenda
Before your one-on-one meetings, take some time to review the team member’s recent work. This will help you identify any areas where the team member needs additional support or guidance. Use this information to create and share an agenda 24 hours prior to the meeting that outlines the topics you want to discuss. Here's a sample agenda:
Begin the meeting by asking how the team member is doing and if there are any updates or concerns they would like to discuss.
Progress and accomplishments
Review the team member's progress on current projects and discuss any accomplishments since the last one-on-one meeting
Challenges and obstacles
Discuss any challenges or obstacles the team member is facing and work together to identify potential solutions.
Provide feedback on the team member's performance, including strengths and areas for improvement. Encourage the team member to provide feedback on your performance as well.
Goals and development
Set goals for the team member, both short-term and long-term, and identify actionable steps to achieve them. Discuss opportunities for growth and development within the team or organization.
Action items and follow-up
Recap the key takeaways from the meeting and identify any action items and next steps. Follow up on action items in the next one-on-one meeting.
End the meeting by thanking the team member for their time and contributions, and reiterate your support for their success.
Questions to ask yourself before your next one-on-one
What does each team member see as their next role?
Does each team member have a career plan, or are they seeking guidance?
What are their aspirations for their next role and how can we help them get there?
Who are your high performing team members?
Which key skills does each team member own?
What do they enjoy doing the most?
Which projects did they excel at?
What is their main area for improvement? How can I help them improve?
Who works in a close capacity, and which team members rarely speak with one another?
Strategic team alignment
Does everyone on the team feel on the same page?
How is team communication?
Are there frequent fire drills, and how are fire drills handled?
Is anyone carrying significantly more weight?
How are they feeling about their workload?
What obstacles are they running into with their current work projects?
What makes their job harder?
Is there anything I can do to be more helpful leaders to them?
Do team members know the strategy for the quarter and year?
Questions to ask during one-on-one meetings
By asking the right questions during one-on-one meetings, you can encourage your team to share thoughts and ideas and support development and career growth.
Here are some questions to ask:
Use open-ended questions that encourage team members to share their thoughts and ideas in detail.
"What's been challenging for you lately?" or "What do you think could be improved on this project?
Ask clarification questions to ensure you fully understand your team members’ perspective.
Example: "Can you explain what you mean by that?" or "Can you give me an example of what you're referring to?"
Ask follow-up questions to explore a topic in more detail.
"How did that make you feel?" or "What do you think we could do differently next time?"
Ask goal-oriented questions that help your team members focus on their development and career aspirations.
"What are your career goals in the next 12 months?" or "What skills do you want to develop in your role?"
End the one-on-one meeting on a positive note, acknowledging the team member's progress and accomplishments. Provide clear expectations for the next meeting.
How to handle difficult conversations
Actively listen to your team member's concerns and show genuine interest in their perspective. This can help build trust and encourage more open and honest communication.
Keep the conversation focused on the issue at hand and avoid getting emotional.
Focus on solutions
Brainstorm ideas together and come up with a plan for moving forward.
5 reasons why taking notes matters
It’s important to capture key points and action items, but also to be present and engaged in the conversation. Your notes don’t need to be a transcript, rather use a consistent format or template to recap the conversation. You can use a shared document or note-taking app, to keep your notes organized and easily accessible. Here are five reasons why meeting notes are essential to success.
- Document progress: Taking notes can help you document the progress of your team members and keep track of their goals, accomplishments, and areas for improvement.
- Prepare for future meetings: Notes can be used to prepare for future one-on-one meetings and ensure that you are following up on action items and addressing any ongoing concerns.
- Identify patterns: By taking notes on common themes or issues that arise during one-on-one meetings, you can identify patterns or trends that may require further attention.
"John expressed some concerns about workload and time management.
- Provide feedback: Notes can be used to provide feedback on the team member's performance and identify areas for improvement. "Steve has been struggling to meet deadlines lately. Let's work together to identify any obstacles and come up with a plan to improve."
Demonstrate active listening: Taking notes can demonstrate to your team member that you are actively listening and engaged in the conversation.
4 tools to enhance your one-on-one meetings
There are many tools available for capturing one-on-one meeting notes and actions as an engineering manager. Here are some we’ve found helpful:
- Note-taking apps: Apps like Evernote, OneNote, and Google Keep are popular for taking notes during one-on-one meetings. These apps allow you to create notes, tag them for easy organization, and share them with others.
- Task management tools: Tools like Trello, Asana, and Monday.com can be used to track action items and deadlines discussed during one-on-one meetings. You can assign tasks to team members, set due dates, and track progress.
- Communication platforms: Platforms like Slack, Microsoft Teams, and Google Chat can be used to record notes and actions during one-on-one meetings in a dedicated channel or chat. This allows you to easily reference past discussions and keep all related information in one place.
- Dedicated software: There are many dedicated software solutions available specifically for one-on-one meeting management. Examples include Lattice, 15Five, and Reflektive.
By prioritizing regular check-ins with your team, you can improve communication, foster stronger relationships, and ultimately drive better business outcomes. If you're looking to take your staff augmentation efforts to the next level, Trio can help!
With our experienced team and comprehensive solutions, we can provide the support and expertise you need to achieve your goals.
Visit our website today to learn more.
8 min read