The heart of development is creation. -- The heart of testing is science.
All Software testing is testing the hypothesis "Is this software suitable to ship to the customer." There are a lot of nuances, testing has a lot of art to it and it's all about testing assumptions.
Your development mindset should be "How can I best solve the costomer problem with the resources I have?" Your testing mindset should be "Did my development effort solve the problem sufficiently?"
It's could be hard to change gears so having people with different viewpoints test the software other than the people who made it helps to keep from overlooking tests that would invalidate the hypothesis. It's a good ideas for the actual developer to test as much of what they write as possible. This shortens the feedback loop, decreased costs and increases developer skill quickly.
Developers must put thier ego on the line
In order to be a good developer you need a bit of hubris. You have to believe you can to the impossible. You have to own the problem and the code becomes your baby. If you don't have a level of passion where you feel personal investment in all the code you write, you need a new job.
Testers should never make it about the developers ego
One occupational hazard for testers is to start testing and complaining about everything. Be on guard for that. Never attack developer personally for flaws in the software. Figure out how to give them meaningful, actionable feedback that doesn't crush thier ego. If you think that being harsh motivates developers, you need a new job.
As testers we have to understand that development is a creative effort and our jobs are to point out flaws in something the developer put a lot of effort into. It's productive to point out defects in the execution but not the person. For example, you might say "20% of the BVT's we agreed to are not passing yet." That's objective usefull feedback. "You suck, you have been working at it for weeks and it is still not ready to ship." Not objective. Still technically accurate and perhaps even deserved on some level, but not called for.
Nothing is sadder than a technically skilled tester who is the enemy of every developer on the team. Except the one who took testing home and is now estranged from family.
Developers need to be subject matter experts and tune out distrations
Developers need to spend a lot of focus on solving hard problems at a micro level. They need to be experts in every line of code they write. Specialization means ignoring distractions and cutting out meetings that are too general.
Developers must focus on solving the technical problems at hand.
Testers shouldn't lose site of the big picture
Testers shouldn't strive to be as much as an expert at the micro level. They need to have a foot in the micro and macro world and provide course correction data to developers who are "down in the tank." Having a good PM can relieve the tester of some of this burden, but a tester who doesn't get the big picture is a liability to the developer they work with.
Testers must focus on making sure the technical problems being solved advance the user experience as a whole.
Testers need to know when to measure the widgets and when to fix the assembly line
Testing activities roughly divide into quality control and quality assurance. Quality control is making sure the delivered items are to spec. Quality assurance is making sure the process leads to high quality output in the first place.